'''
   文档字符串，能用于生成文档，可以作为注释存在
'''

class Person:
    '''
        定义 Person类
    '''
    def __init__(self, name, age):
        '''
        对函数的 表述
        :param name:
        :param age:
        '''
        self.name = name
        self.__age = age

    #定义对私有属性的get方法，获取私有属性
    def getAge(self):
        return self.__age

    #定义对私有属性的重新赋值的set方法，重置私有属性
    def setAge(self,age):
        self.__age = age

person1 = Person("tom",19)
person1.setAge(20)
# print(person1.name,person1.getAge())  #tom 20
# print(person1.__age)  #tAttributeError: 'Person' object has no attribute '__age'

person1.setAge(22)
print("person1.getAge()",person1.getAge())






class Teacher:
    PI = 3.1415926535897
    def __init__(self, name, age,speak):
        self.name = name
        self.__age = age
        self.__speak = speak


    @property      #注意1.@proterty下面默认跟的是get方法，如果设置成set会报错。
    def age(self):
        return self.__age

    @age.setter    #注意2.这里是使用的上面函数名.setter，不是property.setter.
    def age(self,age):
        if age > 150 and age <=0:  #还可以在setter方法里增加判断条件
            print("年龄输入有误")
        else:
            self.__age = age

    @property
    def for_speak(self):  #注意2.这个同名函数名可以自定义名称，一般都是默认使用属性名。
        return self.__speak

    @for_speak.setter
    def for_speak(self, speak):
        self.__speak = speak

t1 = Teacher("herry",45,"Chinese")
t1.age = 38    #注意4.有了property后，直接使用t1.age,而不是t1.age()方法了。
t1.for_speak = "English"

print(t1.name,t1.age,t1.for_speak)  #herry 38 English


